package ay.shadow.mybatisplus.utils;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;

import java.util.Collections;


public class DaiMaSC {
	public static void main(String[] args) {
//		FastAutoGenerator.create("jdbc:oracle:thin:@81.68.83.61:1521:orcl", "hffcj_resource", "hffcj_resource001")
//		FastAutoGenerator.create("jdbc:sqlserver://172.16.0.180:1433;SelectMethod=cursor;DatabaseName=yunwei", "dma", "CaSoft20220505")
//		FastAutoGenerator.create("jdbc:mysql://192.168.2.100:3306/riskcontrol?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8", "root", "123456")
//		FastAutoGenerator.create("jdbc:mysql://192.168.2.116:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8", "root", "2222")
		FastAutoGenerator.create("jdbc:mysql://localhost:3306/shadow_admin?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8", "root", "2222")
				.globalConfig(builder -> {
					builder.author("shadow") // 设置作者
//							.enableSwagger() // 开启 swagger 模式
							.fileOverride() // 覆盖已生成文件
							.outputDir("/Users/shadow/Documents/java/shadow-smart-micros/shadow-admin/src/main/java/"); // 指定输出目录
				})
				.packageConfig(builder -> {
					builder
							.parent("ay.shadow")
							.moduleName("admin")
					; // 设置父包名
//							.pathInfo(Collections.singletonMap(OutputFile.mapper, "/Users/shadow/Documents/java/shadow-smart-micros/shadow-order/src/main/java/ay/shadow/order/")); // 设置mapperXml生成路径
				})
				.strategyConfig(builder -> {
					builder.addInclude("user") // 设置需要生成的表名
							.addTablePrefix("hf_","gs_", "t_","fz_")
							.entityBuilder().enableLombok();//开启lombok	; // 设置过滤表前缀
				})
				.strategyConfig(
						strategyConfigBuilder -> strategyConfigBuilder.entityBuilder()
//								.enableColumnConstant()
								.enableTableFieldAnnotation()   // 生成实体时生成字段的注解，包括@TableId注解等---
								.naming(NamingStrategy.underline_to_camel)  // 数据库表和字段映射到实体的命名策略,为下划线转驼峰
								.columnNaming(NamingStrategy.underline_to_camel)
								.idType(IdType.ASSIGN_ID)    // 全局主键类型为AUTO(自增)
								.enableLombok() // 支持lombok开启注解
//								.logicDeleteColumnName("delete_flag")   // 逻辑删除字段名(数据库)
//								.logicDeletePropertyName("deleteFlag") // 逻辑删除属性名(实体)
								.addTableFills(new Column("create_time", FieldFill.INSERT)) // 自动填充配置  create_time  update_time 两种方式
//								.addTableFills(new Column("create_name", FieldFill.INSERT)) // 自动填充配置  create_time  update_time 两种方式
//								.addTableFills(new Column("dept_id", FieldFill.INSERT)) // 自动填充配置  create_time  update_time 两种方式
//								.addTableFills(new Column("create_id", FieldFill.INSERT)) // 自动填充配置  create_time  update_time 两种方式
								.addTableFills(new Property("updateTime", FieldFill.UPDATE))
//								.addTableFills(new Property("updateId", FieldFill.UPDATE))
//								.versionColumnName("version")   // 开启乐观锁
//								.logicDeleteColumnName("is_delete")
//								.disableSerialVersionUID()  // 禁用生成 serialVersionUID，默认值:true
								.enableChainModel() // 开启实体类链式编程
								.formatFileName("%sEntity") // 实体名称格式化为XXXEntity   formatFileName("%sEntity")
				)
				.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
				.execute();
	}
}
